package com.company.design.construct.decorator;

/**
 * @author yingfing
 * @create 2020--09--26 0:07
 * @describe 装饰模式
 */
public class Test {
    /**
     * 装饰模式 : 就是给一个对象增加一些新的功能,而且是动态的.要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例
     */
    public static void main(String[] args) {
        /**
         * Source 类是被继承的类,Decorator 类是一个装饰类,可以为 Source 类动态的添加一些功能
         */
        Sourceable decorator = new Decorator(new Source());
        decorator.method();
    }

}
/**
 * 总结(应用场景) :
 * 1. 需要扩展一个类的功能
 * 2. 动态的为一个对象增加功能,而且还能动态撤销(继承不能做到,因为继承是静态的代码)
 * 3. 缺点 : 产生过多相似的对象,不易排错 !
 */